class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
      // int m = matrix.size();
      // int n = matrix[0].size();
      // vector<vector<bool>> flag(m,vector<bool>(n,false));
      // for(int i = 0;i < m;++i)
      // {
      //   for(int j = 0;j < n;++j)
      //   {
      //     if(!flag[i][j] && !matrix[i][j])
      //     {
      //       for(int col = 0;col < n;++col){
      //         if(matrix[i][col]){
      //           matrix[i][col] = 0;
      //           flag[i][col] = true;
      //         }
      //       }
      //       for(int row = 0;row < m;++row){
      //         if(matrix[row][j]){
      //           matrix[row][j] = 0;
      //           flag[row][j] = true;
      //         }
      //       }
      //     }
      //   }
      // }
      // return;
      int m = matrix.size();
      int n = matrix[0].size();
      vector<bool> X(m,false);
      vector<bool> Y(n,false);
      for(int i = 0;i < m;++i)
      {
        for(int j = 0;j < n;++j)
        {
          if(!matrix[i][j]){
            X[i] = true;
            Y[j] = true;
          }
        }
      }
      for(int i = 0;i < m;++i)
      {
        for(int j = 0;j < n;++j)
        {
          if(X[i] || Y[j]){
            matrix[i][j] = 0;
          }
        }
      }
    }
};